using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using DominioSATT;
using RepositorioSATT.Conexiones;

namespace RepositorioSATT
{
    public class ClubRepositorio:IClubRepositorio,IMapeadorFila<Club>
    {
        protected Conexion conn = new Conexion();
        protected DataTable dt = new DataTable();
        protected string sql = "";
        IMapeadorFila<Club> mapear;

        #region IClubRepositorioSATT Members

        public List<Club> Listar(int IdFederacion)
        {
            sql = "Select * From  Club Where IdFederacion=" + IdFederacion;
            dt = conn.Listar(sql);
            List<Club> Lista = new List<Club>();
            foreach (System.Data.DataRow dr in dt.Rows)
            {
                mapear = this;
                Lista.Add(mapear.MapearTabla(dr));
            }
            return Lista;
        }
        public List<Club> ListarTodos()
        {
            sql = " Select * From Club ";
            dt = conn.Listar(sql);
            List<Club> Lista = new List<Club>();
            foreach (System.Data.DataRow dr in dt.Rows)
            {
                mapear = this;
                Lista.Add(mapear.MapearTabla(dr));
            }
            return Lista;
        }

        public Club Buscar(int Id)
        {
            sql = " select * from Club where IdClub = " + Id;
            DataRow Dr = conn.Buscar(sql);
            mapear = this;
            return mapear.MapearTabla(Dr);
        }
        public int ObtenerId(string Nombre)
        {
            sql = " Select IdClub from Club Where Nombre = '" + Nombre + "'";
            DataRow Dr = conn.Buscar(sql);
            if (Dr == null)
                return -1;
            else
                return Convert.ToInt32(Dr["IdClub"]);
        }
        public int Agregar(Club Club)
        {
            string datos =Club.Federacion.Idfederacion + ",'" + Club.Nombre + "'" + "," + Club.Presidente.Dni + ",'" + Club.Estado.ToString()+"'";
            
            int id = conn.Agregar("Club","IdFederacion,Nombre,DNI,Estado",datos);
            return id;
        }
        public void Actualizar(Club Club)
        {
            string datos = "IdFederacion = " + Club.Federacion.Idfederacion + ",Nombre ='" + Club.Nombre + "'" + ",DNI=" + Club.Presidente.Dni + ",Estado='" + Club.Estado.ToString() + "'";
            sql = " update Club set " + datos + " where Idclub = " + Club.Idclub;
            conn.ActualizarOEliminar(sql);
        }

        public DataTable ReporteClub()
        {
            sql = " select c.Nombre as Club,f.Nombre as Federacion,P.Nombre + ' ' + P.Apellido as Presidente  from club c inner join federacion f on c.idfederacion = f.idfederacion inner join persona p on  c.dni = p.dni ";
            dt = conn.Listar(sql);
            return dt;
        }

        #endregion

        #region IMapeadorFila<Club> Members

        Club IMapeadorFila<Club>.MapearTabla(System.Data.DataRow fila)
        {
            Club retorno = null;
            if(fila != null)
            {
                IFederacionRepositorio federacionrepo = new FederacionRepositorio();
                Federacion federacion = federacionrepo.Buscar(Convert.ToInt32(fila["IdFederacion"]));
                IPersonaRepositorio personarepo = new PersonaRepositorio();
                Persona persona = personarepo.Obtener(Convert.ToInt32(fila["DNI"]));
                retorno = new Club((fila.IsNull("Idclub") == true ? 0: Convert.ToInt32(fila["Idclub"])),
                federacion,
                (fila.IsNull("Nombre") == true ?string.Empty : Convert.ToString(fila["Nombre"])),
                persona,(fila.IsNull("Estado") == true ?false : Convert.ToBoolean(fila["Estado"])));
            }
            return retorno;
        }

        #endregion

    }
}
